Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Video Controls Overlay #838

Merged
merged 8 commits into from
Jan 23, 2019
Merged

Video Controls Overlay #838

merged 8 commits into from
Jan 23, 2019

Conversation

netpro2k
Copy link
Contributor

@netpro2k netpro2k commented Jan 15, 2019

Move video playback controls into an overlay that is shown on hover instead of in the pause menu. Also add feedback for volume level and playback position.

image

This PR adds a component hover-menu which can specify a template to show on hover of the entity (or any child entities). The menu is automatically hidden when paused to not conflict with the pause menu. Components wishing to use the hover menu can call getMenu() on the hover-menu component to get a reference to the instantiated menu element (and then use the sub elements as they see fit).

Note that the video overlay's layout currently assumes a 16:9 video. The controls will still work for other video sizes but will be positioned a bit oddly. Also the buttons are using multiple large textures similar to what we are doing in the HUD. This is not ideal but can be addressed as a whole when we decide to fix it in other parts of the UI. Also the way dimming works is pretty opinionated about the object the menu is on, we will need to expand this if we want to show hover menu on other objects.

This also fixes some bugs with volume control.

@buildsize
Copy link

buildsize bot commented Jan 16, 2019

File name Previous Size New Size Change
avatar-selector.html 922 bytes 922 bytes 0 bytes (0%)
favicon.ico 33.69 KB 33.69 KB 0 bytes (0%)
hub-preview.png 16.5 KB 16.5 KB 0 bytes (0%)
hub.html 46.1 KB 48.28 KB 2.18 KB (5%)
index.html 695 bytes 695 bytes 0 bytes (0%)
link.html 803 bytes 803 bytes 0 bytes (0%)
LoadingObject_Atom-[hash].glb 27.43 KB 27.43 KB 0 bytes (0%)
waternormals-[hash].jpg 242.98 KB 242.98 KB 0 bytes (0%)
bubble_off-[hash].png 4.22 KB 4.22 KB 0 bytes (0%)
bubble_off-hover-[hash].png 5.85 KB 5.85 KB 0 bytes (0%)
bubble_on-[hash].png 5.65 KB 5.65 KB 0 bytes (0%)
bubble_on-hover-[hash].png 5.46 KB 5.46 KB 0 bytes (0%)
create_object-[hash].png 8.38 KB 8.38 KB 0 bytes (0%)
create_object-hover-[hash].png 10.65 KB 10.65 KB 0 bytes (0%)
freeze_off-[hash].png 7.53 KB 7.53 KB 0 bytes (0%)
freeze_off-hover-[hash].png 9.96 KB 9.96 KB 0 bytes (0%)
freeze_on-[hash].png 7.36 KB 7.36 KB 0 bytes (0%)
freeze_on-hover-[hash].png 9.45 KB 9.45 KB 0 bytes (0%)
mute_off-[hash].png 2.76 KB 2.76 KB 0 bytes (0%)
mute_off-hover-[hash].png 3.65 KB 3.65 KB 0 bytes (0%)
mute_on-[hash].png 5.48 KB 5.48 KB 0 bytes (0%)
mute_on-hover-[hash].png 5.29 KB 5.29 KB 0 bytes (0%)
spawn_photo-[hash].png 3.14 KB 3.14 KB 0 bytes (0%)
tooltip.9-[hash].png 640 bytes 640 bytes 0 bytes (0%)
account-[hash].svg 826 bytes 826 bytes 0 bytes (0%)
daydream_entry-[hash].svg 6.47 KB 6.47 KB 0 bytes (0%)
default_thumbnail-[hash].png 3.02 KB 3.02 KB 0 bytes (0%)
desktop_screen_entry-[hash].svg 376 bytes 376 bytes 0 bytes (0%)
device_entry-[hash].svg 10.48 KB 10.48 KB 0 bytes (0%)
dropdown_arrow-[hash].png 172 bytes 172 bytes 0 bytes (0%)
dropdown_arrow@2x-[hash].png 233 bytes 233 bytes 0 bytes (0%)
gearvr_entry-[hash].svg 574 bytes 574 bytes 0 bytes (0%)
generic_vr_entry-[hash].svg 952 bytes 952 bytes 0 bytes (0%)
giphy_logo-[hash].png 1.02 KB 1.02 KB 0 bytes (0%)
level_background-[hash].png 4.03 KB 4.03 KB 0 bytes (0%)
level_background@2x-[hash].png 4.63 KB 4.63 KB 0 bytes (0%)
level_fill-[hash].png 1.03 KB 1.03 KB 0 bytes (0%)
level_fill@2x-[hash].png 2.02 KB 2.02 KB 0 bytes (0%)
logo-[hash].svg 14.21 KB 14.21 KB 0 bytes (0%)
mic_denied-[hash].png 2.02 KB 2.02 KB 0 bytes (0%)
mic_denied@2x-[hash].png 3.97 KB 3.97 KB 0 bytes (0%)
mic_granted-[hash].png 2.21 KB 2.21 KB 0 bytes (0%)
mic_granted@2x-[hash].png 4.26 KB 4.26 KB 0 bytes (0%)
mic_level-[hash].png 697 bytes 697 bytes 0 bytes (0%)
mic_level@2x-[hash].png 1.48 KB 1.48 KB 0 bytes (0%)
mic_small-[hash].png 234 bytes 234 bytes 0 bytes (0%)
mic_small@2x-[hash].png 370 bytes 370 bytes 0 bytes (0%)
mobile_screen_entry-[hash].svg 914 bytes 914 bytes 0 bytes (0%)
speaker_level-[hash].png 626 bytes 626 bytes 0 bytes (0%)
speaker_level@2x-[hash].png 1.29 KB 1.29 KB 0 bytes (0%)
warning_icon-[hash].png 442 bytes 442 bytes 0 bytes (0%)
warning_icon@2x-[hash].png 699 bytes 699 bytes 0 bytes (0%)
aframe-inspector.min-[hash].js 384.44 KB 384.44 KB 0 bytes (0%)
avatar-selector-[hash].js 54.97 KB 54.97 KB 0 bytes (0%)
avatar-selector-[hash].js.map 134.09 KB 134.11 KB 16 bytes (0%)
engine-[hash].js 1.41 MB 1.41 MB 0 bytes (0%)
engine-[hash].js.map 4.44 MB 4.44 MB -9 bytes (0%)
gifparsing.worker-[hash].js 1.92 KB 1.92 KB 0 bytes (0%)
gifparsing.worker-[hash].js.map 8.33 KB 8.33 KB 0 bytes (0%)
hub-[hash].js 464.17 KB 466.69 KB 2.52 KB (1%)
hub-[hash].js.map 1.2 MB 1.2 MB 5.94 KB (0%)
index-[hash].js 43.86 KB 43.86 KB 0 bytes (0%)
index-[hash].js.map 89.64 KB 89.64 KB 0 bytes (0%)
link-[hash].js 34.4 KB 34.4 KB 0 bytes (0%)
link-[hash].js.map 80.31 KB 80.31 KB 0 bytes (0%)
sketchfab-zip.worker-[hash].js 155.05 KB 155.05 KB 0 bytes (0%)
sketchfab-zip.worker-[hash].js.map 774.31 KB 774.31 KB 0 bytes (0%)
vendor-[hash].js 1.44 MB 1.44 MB 1 bytes (0%)
vendor-[hash].js.map 4.94 MB 4.94 MB 0 bytes (0%)
quack-[hash].mp3 7.03 KB 7.03 KB 0 bytes (0%)
specialquack-[hash].mp3 11.57 KB 11.57 KB 0 bytes (0%)
tone-[hash].mp3 53.92 KB 53.92 KB 0 bytes (0%)
tone-[hash].wav 385.29 KB 385.29 KB 0 bytes (0%)
tone-[hash].webm 32.04 KB 32.04 KB 0 bytes (0%)
tone-[hash].ogg 32.55 KB 32.55 KB 0 bytes (0%)
avatar-selector-[hash].css 1.15 KB 1.15 KB 0 bytes (0%)
avatar-selector-[hash].css.map 136 bytes 136 bytes 0 bytes (0%)
hub-[hash].css 88.68 KB 88.68 KB 0 bytes (0%)
hub-[hash].css.map 124 bytes 124 bytes 0 bytes (0%)
index-[hash].css 38.74 KB 38.74 KB 0 bytes (0%)
index-[hash].css.map 126 bytes 126 bytes 0 bytes (0%)
link-[hash].css 6.1 KB 6.1 KB 0 bytes (0%)
link-[hash].css.map 125 bytes 125 bytes 0 bytes (0%)
home-[hash].mp4 2 MB 2 MB 0 bytes (0%)
home-[hash].webm 1.81 MB 1.81 MB 0 bytes (0%)
negx-[hash].jpg 54.45 KB 54.45 KB 0 bytes (0%)
negy-[hash].jpg 50.97 KB 50.97 KB 0 bytes (0%)
negz-[hash].jpg 53.29 KB 53.29 KB 0 bytes (0%)
posx-[hash].jpg 58.64 KB 58.64 KB 0 bytes (0%)
posy-[hash].jpg 19.17 KB 19.17 KB 0 bytes (0%)
posz-[hash].jpg 57.49 KB 57.49 KB 0 bytes (0%)
spawn_pen-[hash].png 2.39 KB 2.39 KB 0 bytes (0%)
spawn_pen-hover-[hash].png 3.07 KB 3.07 KB 0 bytes (0%)
spawn_camera-[hash].png 4.92 KB 4.92 KB 0 bytes (0%)
spawn_camera-hover-[hash].png 5.83 KB 5.83 KB 0 bytes (0%)
scene.html 1.92 KB 1.92 KB 0 bytes (0%)
scene-[hash].js 118.23 KB 118.25 KB 16 bytes (0%)
scene-[hash].js.map 291.2 KB 291.22 KB 16 bytes (0%)
scene-[hash].css 10.91 KB 10.91 KB 0 bytes (0%)
scene-[hash].css.map 126 bytes 126 bytes 0 bytes (0%)
camera_tool-[hash].glb 757.23 KB 757.23 KB 0 bytes (0%)
hub-preview-white-[hash].png 62.76 KB 62.76 KB 0 bytes (0%)
link_dialog_header-[hash].svg 950 bytes 950 bytes 0 bytes (0%)
moz-logo-black-[hash].png 1.71 KB 1.71 KB 0 bytes (0%)
hub-preview-light-no-shadow-[hash].png 9.35 KB 9.35 KB 0 bytes (0%)
spoke.html 1.42 KB 1.42 KB 0 bytes (0%)
spoke-[hash].js 16.71 KB 16.71 KB 0 bytes (0%)
spoke-[hash].js.map 27.9 KB 27.9 KB 0 bytes (0%)
spoke-[hash].css 6.32 KB 6.32 KB 0 bytes (0%)
spoke-[hash].css.map 126 bytes 126 bytes 0 bytes (0%)
spoke_logo-[hash].png 148.82 KB 148.82 KB 0 bytes (0%)
spoke_logo_black-[hash].png 45.87 KB 45.87 KB 0 bytes (0%)
twitter-[hash].svg 869 bytes 869 bytes 0 bytes (0%)
tap_mellow-[hash].wav 624 bytes 624 bytes 0 bytes (0%)
presence_desktop-[hash].png 252 bytes 252 bytes 0 bytes (0%)
presence_phone-[hash].png 237 bytes 237 bytes 0 bytes (0%)
presence_vr-[hash].png 558 bytes 558 bytes 0 bytes (0%)
hub.service.js 1.34 KB 1.34 KB 0 bytes (0%)
spoke-[hash].webm 5.52 MB 5.52 MB 0 bytes (0%)
spoke-[hash].mp4 6.27 MB 6.27 MB 0 bytes (0%)
action_button.9-[hash].png 2.08 KB 2.08 KB 0 bytes (0%)
spawn_message-[hash].png 625 bytes 625 bytes 0 bytes (0%)
share_camera_off-[hash].png 4.08 KB 4.08 KB 0 bytes (0%)
share_camera_on-[hash].png 6.58 KB 6.58 KB 0 bytes (0%)
share_camera_on-hover-[hash].png 4.44 KB 4.44 KB 0 bytes (0%)
share_screen_off-[hash].png 4.22 KB 4.22 KB 0 bytes (0%)
share_screen_on-[hash].png 6.66 KB 6.66 KB 0 bytes (0%)
share_screen_on-hover-[hash].png 6.8 KB 6.8 KB 0 bytes (0%)
share_window_off-[hash].png 4.13 KB 4.13 KB 0 bytes (0%)
share_window_on-[hash].png 6.62 KB 6.62 KB 0 bytes (0%)
share_window_on-hover-[hash].png 6.7 KB 6.7 KB 0 bytes (0%)
A_bendUp-[hash].wav 60.04 KB 60.04 KB 0 bytes (0%)
Eb_blip-[hash].wav 5.88 KB 5.88 KB 0 bytes (0%)
PenDraw1-[hash].wav 16.04 KB 16.04 KB 0 bytes (0%)
PenSpawn-[hash].wav 12.04 KB 12.04 KB 0 bytes (0%)
PicSnapHey-[hash].wav 120.04 KB 120.04 KB 0 bytes (0%)
quickTurn-[hash].wav 16.04 KB 16.04 KB 0 bytes (0%)
share_message-[hash].png 18.9 KB 18.9 KB 0 bytes (0%)
presence-count-[hash].png 1.78 KB 1.78 KB 0 bytes (0%)
pop-[hash].wav 192.54 KB 192.54 KB 0 bytes (0%)
tack-[hash].wav 40.84 KB 40.84 KB 0 bytes (0%)
suspense-[hash].wav 508.04 KB 508.04 KB 0 bytes (0%)
teleportArc-[hash].wav 184.04 KB 184.04 KB 0 bytes (0%)
welcome-[hash].wav 830.82 KB 830.82 KB 0 bytes (0%)
tick-[hash].wav 8.04 KB 8.04 KB 0 bytes (0%)
whats-new.html 721 bytes 721 bytes 0 bytes (0%)
whats-new-[hash].js 49.75 KB 49.75 KB 0 bytes (0%)
whats-new-[hash].js.map 240.13 KB 240.13 KB 0 bytes (0%)
whats-new-[hash].css 2.68 KB 2.68 KB 0 bytes (0%)
whats-new-[hash].css.map 130 bytes 130 bytes 0 bytes (0%)
generic_vr_headset-[hash].svg 950 bytes 950 bytes 0 bytes (0%)
pause-[hash].png [new file] 9.77 KB
pause-hover-[hash].png [new file] 9.67 KB
play-[hash].png [new file] 10.62 KB
play-hover-[hash].png [new file] 10.51 KB
seek_back-[hash].png [new file] 6.65 KB
seek_back-hover-[hash].png [new file] 6.85 KB
seek_fwd-[hash].png [new file] 6.76 KB
seek_fwd-hover-[hash].png [new file] 7.06 KB

@netpro2k netpro2k added the whats new Include this PR on the "What's New" page label Jan 16, 2019
@netpro2k netpro2k changed the title Video Overlays (WIP) Video Control Overlays Jan 16, 2019
@netpro2k netpro2k changed the title Video Control Overlays Video Controls Overlay Jan 16, 2019
this.el.setAttribute("media-video", "volume", THREE.Math.clamp(this.data.volume + volumeMod, 0, 1));
this.volumeLabel.setAttribute(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might avoid some work with:

      this.volumeLabel.components.text.updateGeometry(this.geometry, font);
      this.volumeLabel.components.text.updateLayout();

We have reservations for setAttribute and also the update for the text component does some checks that aren't necessary for you (because you aren't changing font or shader or texture here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would leave the components data in a weird state. Since this is only when adjusting volume I am not too worried about it.

src/components/media-views.js Outdated Show resolved Hide resolved
@@ -388,6 +376,11 @@ AFRAME.registerComponent("media-video", {
this.video.removeEventListener("pause", this.onPauseStateChange);
this.video.removeEventListener("play", this.onPauseStateChange);
}
if (this.hoverMenu) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might not exist if somehow this remove is called before the hoverMenu promise resolves

this.volumeLabel.object3D.visible = true;
clearTimeout(this.hideVolumeLabelTimeout);
if (this.data.volume) {
this.hideVolumeLabelTimeout = setTimeout(() => (this.volumeLabel.object3D.visible = false), 1000);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok to set a timeout every frame? I suppose people aren't messing with volume all the time...

An alternative might be to write the time that the volume label should be made invisible here since tick is going to keep being called

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah again, since this is only when manipulating volume I don't feel too worried about it.

this.seekForwardButton.object3D.visible = !!this.video && !this.videoIsLive;
this.seekBackButton.object3D.visible = !!this.video && !this.videoIsLive;
}

// Only update playback posiiton for videos you don't own
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

posiiton -> position

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
whats new Include this PR on the "What's New" page
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants